Segmentarea 
Procesul de segmentare presupune spargerea programelor in mai multe segmente pentru care nu este necesara stocarea in zone adiacente de memorie, desi fiecare din ele trebuie incarcat intr un bloc compact de memorie. Acest lucru diminueaza efectele fenomenului de fragmentare, devenind posibila utilizarea si a unor zone de memorie de mai mici dimensiuni. 
Segmentele corespund unor submultimi logice ale programului. Se poate considera, spre exemplificare, segmentul de cod si segmentul de date. Segmentarea poate fi mai pronuntata decit atit, putind exista mici segmente compuse din una sau mai multe rutine sau din una sau mai multe structuri de date.
Mecanismul de conversie a adreselor implicat de tehnica de segmentare este complex, deoarece sistemul de operare trebuie sa dispuna si sa intretina o tabela cu descriptorii segmentelor pentru fiecare program. Fiecare element al acestei tabele este compus din:
-adresa baza;
-dimensiunea segmentului;
-atribute (folosite pentru a verifica daca accesul efectuat este corect).
algoritmul utilizat pentru conversia adreselor: Identificarea segmentului este facilitata de existenta unei submultimi de adrese virtuale. Descriptorul acestuia este extras din tabela de descriptori ai segmentelor. Dupa aceasta, conversia de adresa se face similar cazului tehnicii swapping.
Relocarea este critica din punctul de vedere al performantei sistemului, intrucit ea trebuie efectuata la fiecare ciclu memorie. Deci, daca tabela descriptorilor segmentului ar fi pastrata in memoria principala, apare necesitatea unui ciclu suplimentar de acces la memorie, ceea ce dubleaza timpul cerut de efectuarea unui ciclu memorie.
Depasirea acestei dificultati se face stocind tabela descriptorilor segmentelor intr o, mica dar foarte rapida, memorie RAM cu care este prevazuta MMU. Dimensiunea limitata a acestei memorii speciale necesita folosirea tehnicii de swapping intre aceasta si memoria principala a sistemului.
Un alt tip de problema apare in cazul in care numarul de segmente depaseste cantitatea ce poate fi stocata in memoria RAM a MMU. In acest caz, memoria rapida din cadrul MMU se poate utiliza ca memorie cache, in care se pastreaza cei mai recent utilizati descriptori de segment. Cind se initializeaza procesul de conversie a adreselor, MMU cauta in memoria sa interna descriptorul de segment; daca el nu este gasit, descriptorul este citit din memoria primara si copiat in memoria interna. Principiul localitatii programelor indica o probabilitate ridicata ca descriptorul sa se afle in memoria interna a MMU, cel de al doilea ciclu de memorie este doar arareori necesar , deci nu influenteaza intr un mod important performanta de ansamblu.   
Un alt punct important, referitor la intirzierea de relocare, este viteza cu care se face adunarea indicata in partea de jos a fig. 4.10. Adresa fizica de m biti se obtine prin adunarea portiunii de k biti (k =< m), adresa baza, cu offsetul de h biti (h =< m). h determina dimensiunea maxima a segmentului, intrucit nu este posibil, intr un segment dat, sa se adreseze o informatie cu un offset mai mare decit 2h 1. Cei mai semnificativi m k biti nu sint adunati, de fapt, ci doar copiati din adresa virtuala in adresa fizica, asa ca adunarea are loc doar pentru k biti (daca h+k > m). Deci, cu cit numarul k este mai mare,cu atit intirzierea provocata de adunare creste, ceea ce recomanda utilizarea de valori mici pentru k. Pe de alta parte , adresa baza permite fixarea unui numar de 2m k frontiere de segment, asa ca valori mici ale lui k vor augmenta procesul de fragmentare. Valorile tipice pentru situatii practice ale diferentei m k sint, adesea, intre 4 si 8.

1. Memorie virtuala segmentata
Executia programelor evolueaza printr o serie de faze, iar spatiul de adresare la care se face acces in cadrul unei faze este mai mic decit intregul spatiu de adresare al programului. Daca segmentele la care se face acces in cadrul unei faze sint stocate in memoria primara, programul este executat aproape la fel de repede ca in cazul in care toate segmentele sale s ar gasi in memoria primara, deoarece  practic  toate operatiile de acces au loc la segmente existente in aceasta. Cind se genereaza o referire la un segment absent, el este adus in memoria principala, inlocuind, eventual, alte segmente continute de memoria amintita.
Implementarea mecanismului presupune ca MMU sa verifice prezenta segmentului adresat, ceea ce presupune testarea unui anumit bit in descriptorul segmentului: acest bit este 1 cind segmentul este incarcat si zero cind el este evacuat din memoria primara. Evacuarea se face mai rapid daca segmentul nu a fost modificat de la incarcarea in memorie, deoarece nu mai este necesara copierea sa in memoria de masa (de regula, acest lucru esteadevarat in cazul segmentelor de program). Acesta este motivul pentru care fiecare descriptor de segment are un fanion indicind starea de modificat / nemodificat a segmentului in discutie. Initial, fanionul are valoarea 0 si este inscris cu 1 la fiecare operatie de inscriere a unei locatii din codul segmentului.
O alta caracteristica importanta, chiar esentiala, pentru arhitectura hardware a unui sistem folosind tehnici de segmentare este data de posibilitatea intreruperii de catre CPU a executiei in mijlocul unei instructiuni si de reluare a instructiunii exact de la punctul la care a survenit intreruperea. In aceste cazuri mecanismele clasice pentru intreruperi si capcane nu mai sint necesare, deoarece ele sint activate doar la sfirsitul instructiunii, asa ca ele nu pot fi utilizate in tratarea unor defecte ale segmentelor , defecte care pot aparea oricind pe durata desfasurarii unei instructiuni. Instructiunea nu poate fi terminata daca a aparut un defect de segment , deoarece executia ei ar conduce la o eroare ireparabila.
Desi ultima varianta de tehnica de segmentare are mai multe avantaje (cum sint cele legate de posibilitatea de rulare a programelor al caror spatiu de adresare este mai mare decit cel al memoriei fizice disponibile), ea are si o serie de neajunsuri. Cel mai important este legat de dimensiunile neuniforme ale segmentelor, fapt ce complica gestionarea spatiului de memorie, deoarece, cind se pune problema incarcarii in memoria primara a unui segment de program, s ar putea sa nu existe spatiul necesar, intrucit segmentul evacuat avea dimensiune mai mica, deci memoria eliberata este insuficienta. Rezulta fie necesitatea unor algoritmi complecsi de inlocuire a segmentelor,fie mentinerea permanenta a unui spatiu neutilizat de memorie. Una din tehnicile de rezolvare a acestei probleme este paginarea, care divizeaza spatiul programului in submultimi de aceleasi dimensiuni.